#!/usr/bin/env python3
"""
数据存储模块
负责传感器数据的持久化存储和检索
"""

import json
import os
import time
from datetime import datetime
from typing import Dict, List, Optional

class DataStorage:
    """数据存储类"""
    
    def __init__(self, data_dir: str = "./data"):
        """
        初始化数据存储
        
        Args:
            data_dir: 数据存储目录
        """
        self.data_dir = data_dir
        
        # 创建数据目录
        os.makedirs(data_dir, exist_ok=True)
    
    def save_data(self, data: Dict, filename: Optional[str] = None) -> str:
        """
        保存数据到文件
        
        Args:
            data: 要保存的数据字典
            filename: 文件名，如果为None则自动生成
            
        Returns:
            保存的文件路径
        """
        if filename is None:
            # 生成基于时间戳的文件名
            timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
            filename = f"sensor_data_{timestamp}.json"
        
        # 完整文件路径
        filepath = os.path.join(self.data_dir, filename)
        
        # 添加元数据
        data_with_meta = {
            "timestamp": time.time(),
            "datetime": datetime.now().isoformat(),
            "data": data
        }
        
        # 写入文件
        with open(filepath, 'w', encoding='utf-8') as f:
            json.dump(data_with_meta, f, indent=2, ensure_ascii=False)
        
        return filepath
    
    def load_data(self, filename: str) -> Optional[Dict]:
        """
        从文件加载数据
        
        Args:
            filename: 文件名
            
        Returns:
            加载的数据字典，如果文件不存在则返回None
        """
        filepath = os.path.join(self.data_dir, filename)
        
        if not os.path.exists(filepath):
            return None
        
        try:
            with open(filepath, 'r', encoding='utf-8') as f:
                return json.load(f)
        except Exception as e:
            print(f"加载数据失败: {e}")
            return None
    
    def list_data_files(self) -> List[str]:
        """
        列出所有数据文件
        
        Returns:
            数据文件名列表
        """
        if not os.path.exists(self.data_dir):
            return []
        
        return [f for f in os.listdir(self.data_dir) if f.endswith('.json')]
    
    def get_latest_data_file(self) -> Optional[str]:
        """
        获取最新的数据文件
        
        Returns:
            最新数据文件名，如果没有则返回None
        """
        files = self.list_data_files()
        if not files:
            return None
        
        # 按修改时间排序
        files.sort(key=lambda f: os.path.getmtime(os.path.join(self.data_dir, f)), reverse=True)
        return files[0]

# 使用示例
if __name__ == "__main__":
    # 创建数据存储
    storage = DataStorage("./data")
    
    # 保存示例数据
    test_data = {
        "temperature": 25.6,
        "humidity": 60.2,
        "led_state": False
    }
    
    filepath = storage.save_data(test_data)
    print(f"数据已保存到: {filepath}")
    
    # 列出所有数据文件
    files = storage.list_data_files()
    print(f"数据文件列表: {files}")
    
    # 加载最新数据
    latest_file = storage.get_latest_data_file()
    if latest_file:
        data = storage.load_data(latest_file)
        print(f"最新数据: {data}")